package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.StringTokenizer;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

import vista.VentanaCargarEquipo;
import vista.VentanaCargarEquipoModeloTabla;



import modelo.Equipo;
import modelo.Nadador;
import modelo.Panamericano;

public class ControladorVentanaCargarEquipo implements ActionListener{
	
	private Panamericano panamericano;
	private VentanaCargarEquipo ventanaCargarEquipo;
	private JFileChooser fcVentanaAbrir;
	private FileNameExtensionFilter filtro;
	private Equipo equipo;
	private File file;
	private ArrayList<Nadador> nulo;
	
	private String modalidades [] = {"Masculino","Femenino"};
	
	public ControladorVentanaCargarEquipo(Panamericano panamericano){
		
		super();
				
		ventanaCargarEquipo = new VentanaCargarEquipo();
		ventanaCargarEquipo.setLocationRelativeTo(null);
		ventanaCargarEquipo.setVisible(true);
		ventanaCargarEquipo.agregarListener(this);
		this.ventanaCargarEquipo.setNoEquipos(0);
		this.panamericano = panamericano;
		fcVentanaAbrir = new JFileChooser();
		filtro = new FileNameExtensionFilter("Archivos de texto", "txt");
		fcVentanaAbrir.setFileFilter(filtro);
		nulo = new ArrayList<Nadador>();
		this.ventanaCargarEquipo.setListado(new VentanaCargarEquipoModeloTabla(nulo));
		
				
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if (e.getActionCommand().equalsIgnoreCase("Cargar Equipo"))
		{ 
			
			int seleccion = fcVentanaAbrir.showOpenDialog(null);
			String path;
			
			if (seleccion == fcVentanaAbrir.APPROVE_OPTION)
			{
				path = fcVentanaAbrir.getSelectedFile().getAbsolutePath();
				file = new File(path);
				// procesamos el archivo con los datos de los jugadores
				procesarArchivo(file);
			}
		}
		else if (e.getActionCommand().equalsIgnoreCase("Guardar Equipo"))
		{		
			
			guardarEquipo();
			if (this.panamericano.cantidadEquipos()==8){
				ventanaCargarEquipo.habilitarGuardar(false);
			}
		} // else
			
	} 


	// actionperformed
	
	
	private void procesarArchivo(File file){
		
		
		// leemos, tokenizer, creamos al nadador y agregamos c/u al equipo, 
		StringTokenizer tok;
		String nombre,cedula,apellido, especialidad;
		char sexo;
		Nadador nadador;
		//int dia, mes, annio;
		//GregorianCalendar fechas = new GregorianCalendar();
		
		try {
			
			
			FileReader fr = new FileReader (file);
			BufferedReader br = new BufferedReader(fr);
			String linea;
			equipo = new Equipo();
			
			while((linea=br.readLine())!=null) {
	
				tok = new StringTokenizer(linea,":");
					
					cedula=tok.nextToken();
					
					nombre=tok.nextToken();	
					
					apellido=tok.nextToken();
		
					String fecha=tok.nextToken();
					SimpleDateFormat sdf= new SimpleDateFormat("dd-MM-yyyy"); 
					Date d = sdf.parse(fecha);	
					
					
					sexo = tok.nextToken().charAt(0);

					
					especialidad = tok.nextToken();

					
					nadador = new Nadador(nombre,apellido,cedula,sexo,d,especialidad);
					// lo agregamos al equipo
					equipo.agregarNadador(nadador);					
					
					
					
				
		} // while lineas
			
			// mostramos los datos (nadadores) en la tabla
			cargarTabla();
			
		}// try
		catch (Exception ex){
			this.ventanaCargarEquipo.mostrarMensaje("Error " + ex.getMessage()) ;
		}
		// Falta agregar catch para cuando no ingrese algun dato, o tipo de dato erroneo
		
	}
	
	private void guardarEquipo (){
		int error =0;
		try{
			// seteamos y agregamos el equipo al panamericano...
			String codigoEquipo, pais, nombreEntrenador;
			int annioFundacion;
			
			codigoEquipo = this.ventanaCargarEquipo.getCodigoEquipo();
			pais = this.ventanaCargarEquipo.getPais();
			nombreEntrenador= this.ventanaCargarEquipo.getNombreEntrenador();
			annioFundacion = Integer.parseInt(this.ventanaCargarEquipo.getAnnioFundacion());
			
			
			this.equipo.setCodigoEquipo(codigoEquipo);
			this.equipo.setPais(pais);
			this.equipo.setAnnioFundacion(annioFundacion);
			this.equipo.setNombreEntrenador(nombreEntrenador);
			// ahora lo agregamos al arrayList del panamericano
			this.panamericano.agregarEquipo(equipo);
			this.ventanaCargarEquipo.setNoEquipos(this.panamericano.getEquipos().size());
			this.ventanaCargarEquipo.setListado(new VentanaCargarEquipoModeloTabla(nulo));

		}
		catch(NumberFormatException exception){
        	this.ventanaCargarEquipo.mostrarMensaje("Año de Fundacion no es un Número");
        	ventanaCargarEquipo.limpiarAnnioFundacion();
        	error=1;
		}
		catch (Exception ex){
			this.ventanaCargarEquipo.mostrarMensaje("Se Produjo un Mensaje" + ex.getMessage().toString());
		}
		
		if (error==0)
		{
			ventanaCargarEquipo.limpiarCampos();
			ArrayList<Nadador> nulo = new ArrayList<Nadador>();
			this.ventanaCargarEquipo.setListado(new VentanaCargarEquipoModeloTabla(nulo));
			this.ventanaCargarEquipo.mostrarMensaje("Equipo Registrado ");
		}
		
		
		
	}
	
	
	private void cargarTabla(){
		// limpiando...
		ArrayList<Nadador> nulo = new ArrayList<Nadador>();
		this.ventanaCargarEquipo.setListado(new VentanaCargarEquipoModeloTabla(nulo));
		
		if (this.equipo.cantidadNadadores()> 0){
			ArrayList<Nadador> nadadores = this.equipo.getNadadores();
			this.ventanaCargarEquipo.setListado(new VentanaCargarEquipoModeloTabla(nadadores));
		}
		else {
			this.ventanaCargarEquipo.mostrarMensaje("No hay nadadores para el equipo");
		}
	}
	
	
	
}
